import { INCREMENT, DECREMENT, CHANGE_AGE, PROMISE_CHANGE } from './actionType';

// Action 定义用户要触发的行为，向store传递数据信息
// Action（普通Action、异步Action）
// 普通Action，本质是JS普通对象
// 异步Action，使用了 Thunk middleware 异步 action

export function increment() {
  return {
    type: INCREMENT,
  };
}

export function decrement() {
  return {
    type: DECREMENT,
  };
}

export function addTwo() {
  // redux 不支持数组，自己模拟支持数组的中间件
  return [{ type: INCREMENT }, { type: INCREMENT }, asyncChangeAge(2)];
}

export function asyncChangeAge(num) {
  return (dispatch, getState) => {
    setTimeout(() => {
      dispatch({ type: CHANGE_AGE, num });
    }, 1000);
  };
}

export function promiseChangeAge(num) {
  return {
    type: PROMISE_CHANGE,
    num: new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve(num);
      }, 1000);
    }),
  };
}
